library(tidyverse)
library(plotly)
library(rcartocolor)
merged <- read_tsv('../output/merged_table.tsv')
merged %>%
filter(Specialty == 'Dermatology')
long_table_absolute <- merged %>%
select(Specialty,
Year,
Class,
`Positions Offered`,
`MD Senior Applicants`,
`Total Applicants`,
`MD Senior Matches`,
`Total Matches`) %>%
pivot_longer(cols = -c(Specialty, Year, Class),
names_to = 'Name',
values_to = 'Value') %>%
arrange(Specialty, Class, Year)
long_table_absolute
long_table_percent <- merged %>%
select(Specialty,
Year,
Class,
`MD Senior % Filled`,
`Total % Filled`) %>%
pivot_longer(cols = -c(Specialty, Year, Class),
names_to = 'Name',
values_to = 'Value') %>%
arrange(Specialty, Class, Year)
long_table_percent
p <- long_table_absolute %>%
#filter(Specialty == 'Dermatology') %>%
ggplot(aes(x = Year,
y = Value,
color = Name)) +
geom_point() +
geom_line() +
facet_wrap(~Specialty + Class, scales = 'free_y') +
theme_bw() +
scale_color_carto_d(palette = 'Bold')
p
input <- 'Dermatology'
plot_data <- merged %>% filter(Specialty == input,
Class == 'PGY2')#long_table_absolute %>% filter(Specialty == 'Dermatology')
fig <- plot_ly(plot_data, x = ~Year)
fig <- fig %>% add_trace(y = ~`Positions Offered`, name = 'Positions Offered', mode = 'lines+markers')
fig <- fig %>% add_trace(y = ~`MD Senior Applicants`, name = 'MD Senior Applicants', mode = 'lines+markers')
fig <- fig %>% add_trace(y = ~`Total Applicants`, name = 'Total Applicants', mode = 'lines+markers')
fig %>%
layout( # all of layout's properties: /r/reference/#layout
title = input, # layout's title: /r/reference/#layout-title
xaxis = list( # layout's xaxis is a named list. List of valid keys: /r/reference/#layout-xaxis
title = "Time", # xaxis's title: /r/reference/#layout-xaxis-title
showgrid = F), # xaxis's showgrid: /r/reference/#layout-xaxis-showgrid
yaxis = list( # layout's yaxis is a named list. List of valid keys: /r/reference/#layout-yaxis
title = "uidx") # yaxis's title: /r/reference/#layout-yaxis-title
)
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
No trace type specified:
Based on info supplied, a 'scatter' trace seems appropriate.
Read more about this trace type -> https://plotly.com/r/reference/#scatter
p <- long_table_absolute %>%
filter(Specialty == 'Dermatology') %>%
ggplot(aes(x = Year,
y = Value,
color = Name)) +
geom_point() +
geom_line() +
facet_wrap(~Specialty + Class, scales = 'free_y') +
theme_bw() +
scale_color_carto_d(palette = 'Bold')
ggplotly(p)
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwbG90bHkpCmxpYnJhcnkocmNhcnRvY29sb3IpCmBgYAoKYGBge3J9Cm1lcmdlZCA8LSByZWFkX3RzdignLi4vb3V0cHV0L21lcmdlZF90YWJsZS50c3YnKQpgYGAKCmBgYHtyfQptZXJnZWQgJT4lIAogIGZpbHRlcihTcGVjaWFsdHkgPT0gJ0Rlcm1hdG9sb2d5JykgCmBgYAoKYGBge3J9CmxvbmdfdGFibGVfYWJzb2x1dGUgPC0gbWVyZ2VkICU+JSAKICBzZWxlY3QoU3BlY2lhbHR5LAogICAgICAgICBZZWFyLAogICAgICAgICBDbGFzcywKICAgICAgICAgYFBvc2l0aW9ucyBPZmZlcmVkYCwKICAgICAgICAgYE1EIFNlbmlvciBBcHBsaWNhbnRzYCwKICAgICAgICAgYFRvdGFsIEFwcGxpY2FudHNgLAogICAgICAgICBgTUQgU2VuaW9yIE1hdGNoZXNgLAogICAgICAgICBgVG90YWwgTWF0Y2hlc2ApICU+JSAKICBwaXZvdF9sb25nZXIoY29scyA9IC1jKFNwZWNpYWx0eSwgWWVhciwgQ2xhc3MpLAogICAgICAgICAgICAgICBuYW1lc190byA9ICdOYW1lJywKICAgICAgICAgICAgICAgdmFsdWVzX3RvID0gJ1ZhbHVlJykgJT4lIAogIGFycmFuZ2UoU3BlY2lhbHR5LCBDbGFzcywgWWVhcikKCmxvbmdfdGFibGVfYWJzb2x1dGUKYGBgCmBgYHtyfQpsb25nX3RhYmxlX3BlcmNlbnQgPC0gIG1lcmdlZCAlPiUgCiAgc2VsZWN0KFNwZWNpYWx0eSwKICAgICAgICAgWWVhciwKICAgICAgICAgQ2xhc3MsIAogICAgICAgICBgTUQgU2VuaW9yICUgRmlsbGVkYCwKICAgICAgICAgYFRvdGFsICUgRmlsbGVkYCkgJT4lIAogIHBpdm90X2xvbmdlcihjb2xzID0gLWMoU3BlY2lhbHR5LCBZZWFyLCBDbGFzcyksCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gJ05hbWUnLAogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAnVmFsdWUnKSAlPiUgCiAgYXJyYW5nZShTcGVjaWFsdHksIENsYXNzLCBZZWFyKQoKbG9uZ190YWJsZV9wZXJjZW50IApgYGAKCmBgYHtyfQpwIDwtIGxvbmdfdGFibGVfYWJzb2x1dGUgJT4lIAogICNmaWx0ZXIoU3BlY2lhbHR5ID09ICdEZXJtYXRvbG9neScpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBZZWFyLAogICAgICAgICAgICAgeSA9IFZhbHVlLAogICAgICAgICAgICAgY29sb3IgPSBOYW1lKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKyAKICBmYWNldF93cmFwKH5TcGVjaWFsdHkgKyBDbGFzcywgc2NhbGVzID0gJ2ZyZWVfeScpICsKICB0aGVtZV9idygpICsKICBzY2FsZV9jb2xvcl9jYXJ0b19kKHBhbGV0dGUgPSAnQm9sZCcpIAoKcApgYGAKCmBgYHtyfQppbnB1dCA8LSAnRGVybWF0b2xvZ3knCnBsb3RfZGF0YSA8LSBtZXJnZWQgJT4lIGZpbHRlcihTcGVjaWFsdHkgPT0gaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT0gJ1BHWTInKSNsb25nX3RhYmxlX2Fic29sdXRlICU+JSBmaWx0ZXIoU3BlY2lhbHR5ID09ICdEZXJtYXRvbG9neScpCgpmaWcgPC0gcGxvdF9seShwbG90X2RhdGEsIHggPSB+WWVhcikKZmlnIDwtIGZpZyAlPiUgYWRkX3RyYWNlKHkgPSB+YFBvc2l0aW9ucyBPZmZlcmVkYCwgbmFtZSA9ICdQb3NpdGlvbnMgT2ZmZXJlZCcsIG1vZGUgPSAnbGluZXMrbWFya2VycycpCmZpZyA8LSBmaWcgJT4lIGFkZF90cmFjZSh5ID0gfmBNRCBTZW5pb3IgQXBwbGljYW50c2AsIG5hbWUgPSAnTUQgU2VuaW9yIEFwcGxpY2FudHMnLCBtb2RlID0gJ2xpbmVzK21hcmtlcnMnKQpmaWcgPC0gZmlnICU+JSBhZGRfdHJhY2UoeSA9IH5gVG90YWwgQXBwbGljYW50c2AsIG5hbWUgPSAnVG90YWwgQXBwbGljYW50cycsIG1vZGUgPSAnbGluZXMrbWFya2VycycpCgpmaWcgJT4lCiAgbGF5b3V0KCAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsIG9mIGxheW91dCdzIHByb3BlcnRpZXM6IC9yL3JlZmVyZW5jZS8jbGF5b3V0CiAgICB0aXRsZSA9IGlucHV0LCAjIGxheW91dCdzIHRpdGxlOiAvci9yZWZlcmVuY2UvI2xheW91dC10aXRsZQogICAgeGF4aXMgPSBsaXN0KCAgICAgICAgICAgIyBsYXlvdXQncyB4YXhpcyBpcyBhIG5hbWVkIGxpc3QuIExpc3Qgb2YgdmFsaWQga2V5czogL3IvcmVmZXJlbmNlLyNsYXlvdXQteGF4aXMKICAgICAgdGl0bGUgPSAiVGltZSIsICAgICAgIyB4YXhpcydzIHRpdGxlOiAvci9yZWZlcmVuY2UvI2xheW91dC14YXhpcy10aXRsZQogICAgICBzaG93Z3JpZCA9IEYpLCAgICAgICAjIHhheGlzJ3Mgc2hvd2dyaWQ6IC9yL3JlZmVyZW5jZS8jbGF5b3V0LXhheGlzLXNob3dncmlkCiAgICB5YXhpcyA9IGxpc3QoICAgICAgICAgICAjIGxheW91dCdzIHlheGlzIGlzIGEgbmFtZWQgbGlzdC4gTGlzdCBvZiB2YWxpZCBrZXlzOiAvci9yZWZlcmVuY2UvI2xheW91dC15YXhpcwogICAgICB0aXRsZSA9ICJ1aWR4IikgICAgICMgeWF4aXMncyB0aXRsZTogL3IvcmVmZXJlbmNlLyNsYXlvdXQteWF4aXMtdGl0bGUKICApCmBgYApgYGB7cn0KcCA8LSBsb25nX3RhYmxlX2Fic29sdXRlICU+JSAKICBmaWx0ZXIoU3BlY2lhbHR5ID09ICdEZXJtYXRvbG9neScpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBZZWFyLAogICAgICAgICAgICAgeSA9IFZhbHVlLAogICAgICAgICAgICAgY29sb3IgPSBOYW1lKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKyAKICBmYWNldF93cmFwKH5TcGVjaWFsdHkgKyBDbGFzcywgc2NhbGVzID0gJ2ZyZWVfeScpICsKICB0aGVtZV9idygpICsKICBzY2FsZV9jb2xvcl9jYXJ0b19kKHBhbGV0dGUgPSAnQm9sZCcpIAoKZ2dwbG90bHkocCkKYGBgCgo=